package service;

import domain.Player;
import events.Events;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class AttributeService {

    /**
     * 触发“彩蛋”逻辑：随机决定是否触发特殊事件，并对 player 进行初始属性设置
     */
    public static boolean triggerEgg(Player player) {
        Random rand = new Random();
        int i = rand.nextInt(21);
        boolean flagBadLuck = false;
        switch (i) {
            case 0:
                // “最强属性”彩蛋：所有基础属性设为5
                player.setFfs(5);
                player.setLuck(5);
                player.setFs(5);
                player.setIq(5);
                player.setPf(5);
                Utils.JDialog.showJDialog(Events.colorfulEgg[0]);
                break;
            case 1:
                // “坏运气”彩蛋：提示玩家后续需要在运气上多分，否则最高属性会被砍一半
                flagBadLuck = true;
                Utils.JDialog.showJDialog(Events.colorfulEgg[1]);
                Utils.JDialog.showJDialog("你的幸运值可能会被扣除20%,请你在分配属性的时候为幸运属性分配大于5的点数");
                Utils.JDialog.showJDialog("若你不这样分配,你的最高属性会被扣掉一半");
                Utils.JDialog.showJDialog("啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈");
                break;
            case 2:
                // “天资聪慧”彩蛋：初始智力设为5
                player.setIq(5);
                Utils.JDialog.showJDialog(Events.colorfulEgg[2]);
                break;
            case 3:
                // “铜头铁臂”彩蛋：初始体质设为5
                player.setPf(5);
                Utils.JDialog.showJDialog(Events.colorfulEgg[3]);
                break;
            // i >= 4 时，没有彩蛋，保持默认属性
            default:
                break;
        }
        return flagBadLuck;
    }

    /**
     * 将玩家在界面上输入的 5 个属性值（智力、体质、颜值、家境、运气）应用到 player 对象上。
     * 同时，如果之前触发了“坏运气”彩蛋，需要对属性做额外惩罚调整。
     */
    public static void applyAttributes(Player player, int[] inputs, boolean flagBadLuck) {
        // 先把界面上输入的点数累加到已经可能在 triggerEgg 中预设的基础属性上
        player.setIq(player.getIq() + inputs[0]);
        player.setPf(player.getPf() + inputs[1]);
        player.setFs(player.getFs() + inputs[2]);
        player.setFfs(player.getFfs() + inputs[3]);
        player.setLuck(player.getLuck() + inputs[4]);

        if (flagBadLuck) {
            // 如果运气 >= 5，则扣除 20%（向上取整）
            if (player.getLuck() >= 5) {
                int tempLuck = player.getLuck();
                int decrement = (int) Math.ceil(tempLuck * 0.20); // 20%
                player.setLuck(tempLuck - decrement);
            } else {
                // 如果运气 < 5，那么要把五项属性中最高的那一项砍一半
                Map<String, Integer> map = new HashMap<>();
                map.put("iq", player.getIq());
                map.put("pf", player.getPf());
                map.put("fs", player.getFs());
                map.put("ffs", player.getFfs());
                map.put("luck", player.getLuck());
                int maxValue = Collections.max(map.values());

                // 找到是哪一个属性最大，然后对那个属性减半
                if (maxValue == player.getIq()) {
                    player.setIq(player.getIq() / 2);
                } else if (maxValue == player.getPf()) {
                    player.setPf(player.getPf() / 2);
                } else if (maxValue == player.getFs()) {
                    player.setFs(player.getFs() / 2);
                } else if (maxValue == player.getFfs()) {
                    player.setFfs(player.getFfs() / 2);
                } else {
                    player.setLuck(player.getLuck() / 2);
                }
            }
        }
    }

}
